/*
 * @Description: 
 * @Author: changqing
 * @Date: 2021-08-16 20:35:49
 * @LastEditTime: 2021-08-16 21:01:31
 * @LastEditors: changqing
 * @Usage: 
 */

//那么有没有办法把Cold Observable转成Hot Observable呢？
//严格意义上来说并没有，因为Cold Observable一定要有个开始的动作才会产生数据流，而Hot Observable在被建立的时候就是启动的状态了。
//但是我们可以透过一些Multicast类的operators来达到类似目的，例如share()。在Rxjs 6或更早的版本中，可能会看到publish,内部也是调用share实现的，在7中已经departed。

//在第一次订阅开始前不会启动推送，直到第一次订阅发生启动，所有观察者都是订阅同一个数据流，一对多关系

var {Observable} = require('rxjs');
var { share } = require('rxjs/operators');
const source$ = new Observable(observe => {
  console.log('stream 开始');
  setTimeout(() => observe.next(1), 100);
  setTimeout(() => observe.next(2), 200);
  setTimeout(() => observe.next(3), 300);
  setTimeout(() => {
      observe.next(4);
      observe.complete();
    console.log('stream 结束');
  }, 400);
});

const hotSource$ = source$.pipe(
  share()
);

setTimeout(() => {
  hotSource$.subscribe(data => console.log(`Observable 第一次订阅： ${data}`));

  setTimeout(() => {
    hotSource$.subscribe(data => console.log(`Observable 第二次订阅：${data}`));
  }, 200);
}, 1000);